package es.tikitaka.dao.impl;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;

import es.tikitaka.dao.AmonestacionService;
import es.tikitaka.domain.Amonestacion;
import es.tikitaka.domain.Temporada;
import es.tikitaka.domain.liga.PartidoL;

/**
 * 
 * @author Saúl Domínguez
 * @since 2010
 * @category PFC
 */
@Name("amonestacionService")
public class AmonestacionServiceImpl implements AmonestacionService {

	@In
	EntityManager em;

	/**
	 * Constructor por defecto
	 */
	public AmonestacionServiceImpl() {
	}

	/**
	 * Método para obtener la lista de amonestaciones para un conjunt de
	 * partidos
	 * 
	 * @param partidos
	 *            Ids de los partidos a consultar
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<Amonestacion> getAmonestaciones(List<PartidoL> partidos) {
		List<Amonestacion> result = new ArrayList<Amonestacion>();

		StringBuffer consulta = new StringBuffer(256);
		consulta
				.append("select a from Amonestacion a join fetch a.partido p where a.tipo is not null and p.id in (");
		for (PartidoL p : partidos) {
			consulta.append(p.getId());
			consulta.append(", ");
		}
		StringBuffer query = new StringBuffer(256);
		query.append(consulta.substring(0, consulta.length() - 2));
		query.append(")");
		result = em.createQuery(query.toString()).getResultList();

		return result;
	}

	/**
	 * Método para eliminar una amonestación del sistema
	 * 
	 * @param id
	 *            Id de la amonestación
	 * @return estado del proceso (true or false)
	 */
	public boolean delete(Integer id) {
		boolean correcto;
		try {
			Amonestacion amonestacion = em.getReference(Amonestacion.class, id);
			em.remove(amonestacion);
			em.flush();
			correcto = true;
		} catch (RuntimeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			correcto = false;
		}
		return correcto;
	}

	/**
	 * Método para almacenar en el sistema una amonestación o las modificaciones
	 * sufridas por una amonestación ya existente
	 * 
	 * @param amonestacion
	 *            Amonestacion a almacenar
	 * @return estado del proceso (true or false)
	 */
	public boolean save(Amonestacion amonestacion) {
		boolean correcto;
		try {
			em.persist(amonestacion);
			em.flush();
			correcto = true;
		} catch (RuntimeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			correcto = false;
		}
		return correcto;
	}
}
